PostgreSQL pg_profile 报告解读与优化
1 背景知识
本文将介绍 pg_profile 报告 报表的条目。pg_profile 报告还提供了一个搜索功能,用于搜索感兴趣的相关内容。
接下来就会根据[[report_omega_Last24h_334_388.html]]进行。
2 报告详细信息
一级字段 | 二级字段 | 说明 |
---|---|---|
version | PostgreSQL pg_profile的版本。 | |
Server name | 服务器连接的名称。 | |
Interval(sample) | start | 快照开始的id 。 |
end | 快照结束的id 。 |
|
Interval (time) | start | 快照开始的时间。 |
end | 快照结束的时间。 | |
Settings | 数据库版本。 |
3 服务器统计信息
3.1 Database statistics
此部分报告统计每个数据库的统计信息,是基于 pg_stat_database 视图收集而成的。
一级字段 | 二级字段 | 说明 |
---|---|---|
database | 数据库名称。 | |
Transactions | Commits | 已提交的事务的数量。 |
Rollbacks | 已回滚的事务的数量。 | |
Deadlocks | 死锁发生的数量。 | |
Block statistics | Hit(%) | 缓冲区数据块的命中率。 |
Read | 物理读的数据块的数量。 | |
Hit | 逻辑读的数据块的数量。 | |
Block I/O times | Read | 会话服务器进程读取数据文件块所花费的时间(以秒为单位)。 |
Write | 会话服务器进程写入数据文件块所花费的时间(以秒为单位)。 | |
Tuples | Ret | 返回的元组数量。 |
Fet | 获取的元组数量。 | |
Ins | 插入的元组数量。 | |
Upd | 更新的元组数量。 | |
Del | 删除的元组数量。 | |
Temp files | Size | 该数据库查询时造成的写入临时文件的数据总量(temp_bytes). |
Files | 该数据库中查询语句创建的临时文件数量(temp_files) | |
Size | 快照结束的时间时的数据库大小(pg_database_size()) | |
Growth | 快照区间间隔时间内,数据库的数据量增长大小。 |
3.2 Cluster I/O statistics
此部分报告统计 I/O
操作相关的统计信息。按照对象类型、会话类型、上下文进行展示。是基于 pg_stat_io 视图收集而成的。
一级字段 | 二级字段 | 说明 |
---|---|---|
Object | 发起I/O 操作的数据库对象。 |
|
Backend | 发起I/O 操作的服务器会话进程的类型。 |
|
Context | I/O 操作的上下文。 |
|
Reads | Count | 发生读取操作的数量。 |
Bytes | 发生读取操作的数据量。 | |
Time | 发生读取操作所花费的时间。 | |
Writes | Count | 发生写入操作的数量。 |
Bytes | 发生写入操作的数据量。 | |
Time | 发生写入操作所花费的时间。 | |
Writebacks | Count | 要求内核写入永久存储的数据块数量。 |
Bytes | 要求内核写入永久存储的数据块大小。 | |
Time | 内核写入永久存储的数据块所花费的时间。 | |
Extends | Count | 发生对象扩展的操作数量。 |
Bytes | 发生对象扩展的数据量。 | |
Time | 对象扩展的操作所花费的时间。 | |
Hits | 在共享缓冲区中找到目标表所尝试的次数。 | |
Evictions | 从共享缓冲区或本地缓冲区中移除一个数据块的次数。 | |
Reuses | 在批量读取、批量写入、和清理死亡元组的操作时,共享缓冲区之外的环形缓冲区将会被重复使用的次数。 | |
Fsyncs | Count | fsync 调用次数。 |
Time | fsync 操作所花费的时间。 |
3.3 Cluster SLRU statistics
PostgreSQL SLRU 缓存的访问统计信息,基于 pg_stat_slru 视图收集而成的。
字段 | 说明 |
---|---|
Name | PostgreSQL SLRU 名称。 |
Zeroed | 初始化置零的缓冲区块的数量。 |
Hits | 在PostgreSQL SLRU 命中数据块的数量。 |
Reads | 读取PostgreSQL SLRU数据块数量。 |
%Hit | 在PostgreSQL SLRU 命中数据块的百分比。 |
Writes | 写入 PostgreSQL SLRU数据块数量。 |
Checked | 检查 PostgreSQL SLRU数据块是否存在的数量。 |
Flushes | PostgreSQL SLRU脏数据块刷新数量。 |
Truncates | PostgreSQL SLRU移除数据块的数量。 |
3.4 Session statistics by database
此部分报告统计会话的状态。
一级字段 | 二级字段 | 说明 |
---|---|---|
Database | 数据库名称。 | |
Timings (s) | Total | 会话在数据库中所花费的总和时间。 |
Active | 会话在数据库中执行SQL语句所花费的时间。 | |
Idle | 会话在数据库中IDLE 时间,包括idle_in_trasaction_time 。 |
|
Sessions | Established | 连接此数据库的会话总数。 |
Abondoned | 由于客户端连接丢失而终止的数据库会话数量。 | |
Fatal | 由于数据库致命错误导致会话丢失的数量。 | |
Killed | DBA 手动杀死的会话数量。 |
3.5 Statement statistics by database
此部分报告统计 pg_stat_statements 会话信息的统计信息。
一级字段 | 二级字段 | 说明 |
---|---|---|
Database | 数据库名称。 | |
Calls | SQL 语句的执行总数。 | |
Time (s) | Plan | 生成执行计划的时间(total_plan_time 总和)。 |
Exec | 执行时间(total_time 或 total_exec_time 总和) 。 | |
Read | 读取数据块所花费的时间。 | |
Write | 写入数据块所花费的时间。 | |
Trg | 执行触发器功能的所花费的时间。 | |
Temp I/O Time | Read | 读取临时文件数据块所花费的时间。 |
Write | 写入临时文件数据块所花费的时间。 | |
Fetched (blk) | Shared | 读取共享缓冲区中的数据块数量总和(shared_blks_read + shared_blks_hit)。 |
Local | 读取本地缓冲区中的数据块数量总和(local_blks_read + local_blks_hit)。 | |
Dirtied (blk) | Shared | 共享缓冲区中被移除的数据块数量(shared_blks_dirtied)。 |
Local | 本地缓冲区中被移除的数据块数量(local_blks_dirtied)。 | |
Temp (blk) | Read | 读取操作所使用的临时文件数据块数量(temp_blks_read) 。 |
Write | 写入操作所使用的临时文件数据块数量(temp_blks_written)。 | |
Local (blk) | Read | 读取临时文件数据块数量(local_blks_read)。 |
Write | 写入临时文件数据块数量(local_blks_written)。 | |
Statements | 语句执行总数。 | |
WAL size | 产生的WAL 总量。 |
3.6 JIT statistics by database
基于 pg_stat_statements 扩展提供的 JIT 相关的统计数据。
一级字段 | 二级字段 | 说明 |
---|---|---|
Database | 数据库名称。 | |
Calls | 语句执行次数总数。 | |
Time (s) | Plan | 生成执行计划所花费的时间(total_plan_time) |
Exec | 执行语句所花费的时间( total_time 或者 total_exec_time)。 | |
Generation | Count | 执行JIT编译生成的代码语句的总计数。 |
Gen. time | 生成JIT 代码所花费的时间总和。 | |
Inlining | Count | 生成JIT代码函数需要内联的次数。 |
Time | 生成JIT 内联函数所花费的总时间。 | |
Optimization | Count | 优化语句的次数。 |
Time | 优化语句所花费的总时间。 | |
Emission | Count | 提交JIT 代码的次数。 |
Time | 生产JIT代码的总时间(秒)。 |
3.7 Cluster statistics
此部分报告统计 pg_stat_bgwriter 视图信息。
一级字段 | 说明 |
---|---|
Scheduled checkpoints | 发生检查点的总数量,取自checkpoints_timed 字段。 |
Requested checkpoints | 请求发生检查点的总数,取自checkpoints_req 字段。 |
Checkpoint write time (s) | 检查点发生后写入数据总时间,取自checkpoint_write_time` 字段。 |
Checkpoint sync time (s) | 检查点同步数据总时间(以秒为单位),取自checkpint_sync_time 字段。 |
Checkpoints buffers written | 检查点发生后共享缓冲区写入数据块的总数,取自buffers_checkpint 字段。 |
Background buffers written | 由bg_writer 进程写入数据块的总数,取自buffers_clean 字段。 |
Backend buffers written | 由会话服务器进程写入数据块的总数,取自buffers_backend 字段。 |
Backend fsync count | 调用fsync 的总次数,取自buffers_backend_fync 字段。 |
Bgwriter interrupts (too many buffers) | 由于bg_writer进程达到bgwriter_lru_maxpages 参数值,而被中断写入的次数。 |
Number of buffers allocated | 缓冲区使用的数据块数量,取自(buffers_alloc 字段)。 |
WAL generated | WAL 日志生成总量。 |
Start LSN | 此报告开始的LSN 序号。 |
End LSN | 此报告结束的LSN 序号。 |
WAL segments archived | 归档PostgreSQL WAL日志 的数量,取自pg_stat_archiver 视图的archived_count 字段。 |
WAL segments archive failed | 归档 PostgreSQL WAL日志失败的数量,取自pg_stat_archiver 视图failed_count 字段。 |
3.8 WAL statistics
一级字段 | 说明 |
---|---|
WAL generated | 快照区间内 WAL 日志产生的数据量。 |
WAL per second | 平均每秒WAL 日志产生的数据量。 |
WAL records | 快照区间内WAL 日志记录数。 |
WAL FPI | WAL 日志全页数量。 |
WAL buffers full | 因WAL buffer 写满导致 WAL 数据写入磁盘的次数(wal_buffers_full)。 |
WAL writes | 因(wal_write) 请求导致WAL buffer 写入磁盘次数。 |
WAL writes per second | 每秒因(wal_write) 请求导致WAL buffer 写入磁盘次数。 |
WAL sync | 因(issue_xlog_fsync) 请求导致WAL buffer 写入磁盘次数。 |
WAL syncs per second | 每秒因(issue_xlog_fsync) 请求导致WAL buffer 写入磁盘次数。 |
WAL write time (s) | 因(XLogWrite) 请求导致WAL buffer 写入所花费的磁盘时间。 |
WAL write duty | WAL 日志写入磁盘的时间与报告区间时间的占比百分比。 |
WAL sync time (s) | 因(issue_xlog_fsync ) 请求导致WAL buffer 同步磁盘所花费的时间 |
WAL sync duty | WAL 日志同步磁盘的时间与报告区间时间的占比百分比。 |
3.9 Tablespace statistics
此部分报告统计每个表空间增长的信息。
一级字段 | 说明 |
---|---|
Tablespace | 表空间名称。 |
Path | 表空间路径。 |
Size | 表空间大小。 |
Growth | 在报告区间内表空间增长的大小。 |
3.10 Wait sampling
此部分报告统计 pg_wait_sampling 扩展获取的数据。
3.10.1 Wait events types
此部分报告统计每种等待事件类型统计信息。这一部分的统计信息是通过 pg_wait_sampling 扩展获取的数据。
一级字段 | 说明 |
---|---|
Wait exent type | 当前语句触发的等待事件类型,取自pg_stat_activity 。 |
Statements Waited (s) | SQL语句执行导致的等待事件的等待的时间。 |
%Total | SQL语句执行导致的等待事件的等待时间,占总等待时间的百分比。 |
All Waited (s) | 在当前等待事件类型的情况下,所有进程(包括后端进程)的等待时间。 |
%Total | 在当前等待事件类型时,占总等待时间的百分比。 |
3.10.2 Top wait events (statements)
此部分报告统计SQL语句执行所导致的等待事件和等待时间信息。
一级字段 | 说明 |
---|---|
Wait exent type | 等待事件类型。 |
Wait exent | 等待事件的名称。 |
Waited (s) | SQL语句执行导致的等待时间。 |
%Total | SQL语句指定导致的等待时间在总等待时间的百分比。 |
3.10.3 Top wait events (All)
此部分报告统计所有进程(包括会话服务器进程和后端进程)的等待事件。
一级字段 | 说明 |
---|---|
Wait exent type | 等待事件的类型。 |
Wait exent | 等待事件的名称。 |
Waited (s) | 所有后端进程在等待事件中的等待时间(以秒为单位)。 |
4 子快照统计信息
开启子快照功能之后,便会收集会话状态的详细信息。
4.1 Session state statistics by database
一级字段 | 二级字段 | 说明 |
---|---|---|
Database | 数据库名称。 | |
Summary | Active | 会话的acitive 状态的总时间。 |
Idle in xact | 空闲事务会话状态的总时间。 | |
Idle in xact (A) | 空闲事务会话(abort)状态的总时间。 | |
Maximal | Active | acitive 状态的最长时间。 |
Idle in xact | 空闲事务会话状态的最长时间。 | |
Idle in xact (A) | 空闲事务会话(abort)状态的最长时间。 | |
xact age | 最老的事务ID . |
4.2 Top 'idle in transaction' session states by duration
此部分报告统计 pg_stat_activity 视图中空闲事务的会话信息。
一级字段 | 说明 |
---|---|
Database | 数据库名称。 |
User | 用户名称 |
App | 应用名称。 |
Addr | ip 地址。 |
Pid | 进程ID. |
Xact start | 事务 |
State change | 会话状态更改时间。 |
State duration | 会话状态的持续时间。 |
4.3 Top 'active' session states by duration
此部分报告统计 pg_stat_activity 视图中活动(active)事务的会话信息。
一级字段 | 说明 |
---|---|
Database | 数据库名称。 |
User | 用户名称 |
App | 应用名称。 |
Addr | ip 地址。 |
Pid | 进程ID. |
Xact start | 事务开始时间。 |
State change | 会话状态更改时间。 |
State duration | 会话状态的持续时间。 |
4.4 Top states by transaction age
此部分报告统计 pg_stat_activity 视图中事务年龄的会话信息。
一级字段 | 说明 |
---|---|
Database | 数据库名称。 |
User | 用户名称 |
App | 应用名称 |
Xact start | 事务开始时间。 |
age | 事务的年龄(age(backend_xmin)。 |
State | 事务年龄最大的会话状态。 |
State change | 会话状态变更的时间戳。 |
State duration | 会话状态的持续时间。 |
4.5 Top states by transaction duration
此部分报告统计 pg_stat_activity 视图中事务状态的持续时间进行排序,和其会话信息。
一级字段 | 说明 |
---|---|
Database | 数据库名称。 |
User | 用户名称 |
App | 应用名称 |
Xact start | 事务开始时间。 |
age | 事务的年龄(age(backend_xmin)。 |
State | 事务年龄最大的会话状态。 |
State change | 会话状态变更的时间戳。 |
State duration | 会话状态的持续时间。 |
5 SQL query statistics
此部分报告包含在报告区间内几个重要的统计排序的顶级SQL 语句。是从 pg_stat_statements 视图 中获取数据。双击统计信息即可显示查询SQL文本。